package com.demo.java.OD551_600.OD596;

import java.util.Scanner;
import java.util.*;
/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【字符串排序(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146585594
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 创建一个列表来存储分割后的单词
        List<String> list = new ArrayList<String>();

        // 读取输入的一行字符串
        String input = in.nextLine();

        // 将输入的字符串按空格分割成单词
        String[] str = input.split(" ");
        for (int i = 0; i < str.length; i++) {
            list.add(str[i]);
        }

        // 自定义排序规则，忽略大小写并按字母顺序排序
        Collections.sort(list, new Comparator<String>() {
            public int compare(String o1, String o2) {
                // 将两个字符串转换为字符数组
                char[] char1 = o1.toCharArray();
                char[] char2 = o2.toCharArray();

                int length = Math.min(char1.length, char2.length); // 比较两个字符串的最小长度

                for (int i = 0; i < length; i++) {
                    // 将字符统一转换为小写进行比较
                    char a = char1[i] > 'a' ? char1[i] : (char) (char1[i] + 32);
                    char b = char2[i] > 'a' ? char2[i] : (char) (char2[i] + 32);

                    // 比较字符
                    if (a < b) {
                        return -1; // 如果字符a小于b，则o1排在前
                    } else if (a > b) {
                        return 1; // 如果字符a大于b，则o2排在前
                    } else {
                        continue; // 如果相等，则继续比较下一个字符
                    }
                }

                return 0; // 如果所有字符相等，返回0
            }
        });

        // 去重操作：使用一个新的列表来存储不重复的单词
        List<String> revdup_list = new ArrayList<String>();
        revdup_list.add(list.get(0));   // 添加第一个元素
        int p = 1;

        // 遍历列表，比较当前单词与已添加的单词是否相同（忽略大小写）
        for (int i = 0; i < list.size(); i++) {
            if (p < list.size() && revdup_list.get(i).toLowerCase().equals(list.get(p).toLowerCase())) {
                p = p + 1;
                i--; // 如果重复，则跳过当前循环
            } else if (p < list.size() && !revdup_list.get(i).toLowerCase().equals(list.get(p).toLowerCase())) {
                revdup_list.add(list.get(p)); // 否则添加当前不重复的单词
                if (p == list.size() - 1) {
                    break; // 如果已经遍历完所有单词，跳出循环
                }
            }
        }

        // 输出排序和去重后的结果
        for (int k = 0; k < revdup_list.size(); k++) {
            if (k == revdup_list.size() - 1) {
                System.out.print(revdup_list.get(k)); // 最后一个单词不加空格
            } else {
                System.out.print(revdup_list.get(k) + " "); // 其他单词后加空格
            }
        }
    }
}